/**
 * 
 */
package br.edu.catolica.sadbc.action;

import java.util.ArrayList;
import java.util.List;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.datamodel.DataModel;

import br.edu.catolica.sadbc.core.action.AbstractAction;
import br.edu.catolica.sadbc.core.exception.BusinessObjectException;
import br.edu.catolica.sadbc.core.exception.ValidateBusinessRulesException;
import br.edu.catolica.sadbc.core.util.StringUtil;
import br.edu.catolica.sadbc.entity.Docente;
import br.edu.catolica.sadbc.entity.Usuario;
import br.edu.catolica.sadbc.entity.filter.DocenteSearchFilter;
import br.edu.catolica.sadbc.manager.DocenteManager;

/**
 * @author robert.resende
 *
 */
@Name(value = "docenteAction")
public class DocenteAction extends AbstractAction<Docente> {
	
	@In(required = false)
	@Out(required = false)
	private Docente docente;
	
	@In(required = false)
	private Usuario usuario;
	
	@In(required = false)
	private DocenteManager docenteManager;

	@In(required = false)
	private DocenteSearchFilter docenteSearchFilter;
	
	@DataModel
	private List<Docente> docentes = new ArrayList<Docente>();

	private Boolean exibeDataTable = Boolean.FALSE;
	
	public void init() {
		this.docente = null;
		this.usuario = null;
		this.usuario = null;
		this.docenteSearchFilter = null;
		this.docentes = new ArrayList<Docente>();
		this.exibeDataTable = Boolean.FALSE;
	}
	
	public String salvar() {
		try {
			this.docente.setUsuario(this.usuario);
			String retorno = this.docenteManager.salvar(this.docente);
			addMessageInfo("Operação realizada com sucesso!");
			return retorno;
		} catch (ValidateBusinessRulesException vbe) {
			vbe.printStackTrace();
			addMessageErro(vbe.getLocalizedMessage());
			return RESULT_FAIL;
		} catch (BusinessObjectException boe) {
			boe.printStackTrace();
			addMessageErro(boe.getLocalizedMessage());
			return RESULT_FAIL;
		}
	}
	
	public List<Docente> pesquisarDocente() {
		if (validarCamposPesquisa(this.docenteSearchFilter)) {
			this.docentes = this.docenteManager.pesquisarDocente(this.docenteSearchFilter);
			if (!this.docentes.isEmpty()) {
				this.exibeDataTable = Boolean.TRUE;
			} else {
				this.docentes.clear();
				addMessageInfo("Nenhum resultado encontrado.");
			}
		}
		return this.docentes;
	}
	
	public String editarDocente(Docente docente) {
		this.docente = docente;
		return RESULT_EDIT;
	}
	
	public String detalharDocente(Docente docente) {
		this.docente = docente;
		return RESULT_DETAIL;
	}
	
	public String excluirDocente(Docente docente) {
		return null;
	}
	
	private boolean validarCamposPesquisa(DocenteSearchFilter docenteSearchFilter) {
		if (StringUtil.getInstance().isVazia(docenteSearchFilter.getNomeDocente()) && StringUtil.getInstance().isVazia(docenteSearchFilter.getCpfDocente())) {
			addMessageErro("Nenhum filtro de pesquisa informado.");
			return Boolean.FALSE;
		} else if (StringUtil.getInstance().isNaoVazia(docenteSearchFilter.getNomeDocente()) && StringUtil.getInstance().isMenor(3, docenteSearchFilter.getNomeDocente())) {
			addMessageErro("Campo nome informado menor que 3 caracteres.");
			return Boolean.FALSE;
		} 
		return Boolean.TRUE;
	}

	public Boolean getExibeDataTable() {
		return exibeDataTable;
	}

	public void setExibeDataTable(Boolean exibeDataTable) {
		this.exibeDataTable = exibeDataTable;
	}

}
